/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2023-03-01
 * Time: 22:20
 */

//依赖倒转原则
public class NoDependencyInversion {
    public static void main(String[] args) {
        Person person = new Person();
        person.receive(new Email());
    }
}

// 抽象不应该依赖细节 细节应该依赖抽象
// 依赖倒置的核心思想是 面向接口编程  抽象的东西相对稳定
// 接口 和 抽象类 价值 在于设计 展现细节的任务给实现类

//实际案例
// 方案一 不是依赖倒置的方法
class Email{
    public String getInfo(){
        return "电子邮件信息: Email";
    }
}


//完成Person接收消息的功能
class Person{
    // 问题就在于 在接收消息的时候 直接写死了一个类

    //存在的问题
    //1.简单 容易想到
    //2.如果 我们获取的对象是 微信 短信等 则要新增类 同时Person这个类 也要接收相应的接收方法
    //3.解决思路 引入一个抽象的接口 IReceive 表示 接收者 这样Person与接口发生依赖
    //  因为Email WeiXin都是属于接收的范围 他们各自实现IReceive接口就好 这样就符合 依赖倒转原则
    public void receive(Email email){
        System.out.println(email.getInfo());
    }
}